/* 
 * File:   DVenta.cpp
 * Author: Arturo
 * 
 * Created on November 28, 2010, 12:20 AM
 */

#include "DVenta.h"

DVenta* DVenta::instancia = NULL;

using namespace std;

DVenta::DVenta() {
    char linea[10000];

    int id;
    int idproducto;
    double precio;
    string fecha;
    int idcliente;

    ifstream file("ventas.txt");
    if (!file.fail()) {
        while (!file.eof()) {
            file.getline(linea, 10000);
            if (linea[0] == '\0') continue;

            id = atoi(strtok(linea, "_"));
            idproducto = atoi(strtok(NULL, "_"));
            precio = atof(strtok(NULL, "_"));
            fecha = strtok(NULL, "_");
            idcliente = atoi(strtok(NULL, "_"));
            this->Add(new NVenta(id, idproducto, precio, fecha, idcliente));
        }

        file.close();
    }
}

DVenta::~DVenta() {
}

DVenta &DVenta::GetInstancia() {
    if (instancia == NULL) {
        instancia = new DVenta();
    }

    return *instancia;
}

bool DVenta::Save() {
    // Si la lista esta vacia, retorno que NO he guardado nada.
    if (!this->Head) {
        return false;
    }

    ofstream file;
    file.open("ventas.txt");

    this->Reset();

    while(this->Current) {
        file << this->Current->Dato->ToDB() << endl;
        this->Next();
    }

    file.close();

    this->Reset();

    return true;
}

Lista* DVenta::VentasDelCliente(int idcliente) {
    Lista* r = new Lista();

    this->Reset();

    while(this->Current) {
        if ( ((NVenta*)this->Current->Dato)->GetIdCliente() == idcliente) {
            r->Add(this->Current->Dato);
        }

        this->Next();
    }

    return r;
}

Lista* DVenta::VentasDelProducto(int idproducto) {
    Lista* r = new Lista();

    this->Reset();

    while(this->Current) {
        if (((NVenta*)this->Current->Dato)->GetIdProducto() == idproducto) {
            r->Add(this->Current->Dato);
        }

        this->Next();
    }

    return r;
}

bool DVenta::AddFrom(DProducto* &p, DCliente* &c) {
    return this->Add(new NVenta(p->Current, c->Current));
}
